package com.tedu.api.thread;

import org.junit.Test;

/**
 * 线程：单线程【main主线程】、多线程、创建两个线程以上同时处理一件事【并发】
 *       多线程并发
 * 多人聊天室  Version2    多个人在同一个服务器聊天
 *
 * 多线程案例：
 *    Kitchen  厨房类----    两个厨子==两个线程---炒菜
 *    Chef     厨子类----    每个厨子使用厨房炒不同的菜系【并发】
 *
 */
public class Kitchen {
    public static void main(String[] args) {
        //创建线程---直接使用lambda表达式【没有并发】
        // 【并发--实现Runnable】
        Thread chef1=new Thread(new Chef("西红柿炒鸡蛋"));
        Thread chef2=new Thread(new Chef("赛螃蟹"));
        Thread chef3=new Thread(new Chef("土豆豆角粉条"));
        chef1.start();//厨子  1~3秒   西红柿炒鸡蛋
        chef2.start();
        chef3.start();
    }
}
//1.创建厨子类：每个厨子炒不同菜--线程：Runnable接口【项目：建议结构合理】
class Chef implements Runnable{
    private String disName;//私有属性
    //2.传入构造器：通过构造器确定，哪位厨子炒什么菜
    public Chef(String dn){
        //私有菜系
        this.disName=dn;
    }
    //3.实现厨子功能：1到3秒随机炒出一道菜
    public void run() {
        System.out.println("开始准备："+disName);
        //准备时间：1~3秒---Random随机数类--->Math数学类，随机数random()
        /**
         * Math.random() :生成随机数，范围0.0~1.0之间浮点数【不包括1.0】
         * Math.random()*3000，生成随机数，范围0.0~3000之间浮点数【不包括3000】
         *            转换成long:0到2999的整数    012
         *       (long)(Math.random()*3000)+1000
         *       范围：  1000~3999    随机数：  1  2  3
         */
        try {
            Thread.sleep((long)(Math.random()*3000)+1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("准备完毕"+disName+"请开吃");
    }

}